package com.rmfyzxfw.caseprocess.controller;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.rmfyzxfw.caseprocess.boot.result.page.Pagination;
import com.rmfyzxfw.caseprocess.model.cmd.DataItemCmd;
import com.rmfyzxfw.caseprocess.model.cmd.DataItemEditCmd;
import com.rmfyzxfw.caseprocess.model.cmd.DataItemManageCmd;
import com.rmfyzxfw.caseprocess.model.converter.DataItemConverter;
import com.rmfyzxfw.caseprocess.model.param.DataItemListParam;
import com.rmfyzxfw.caseprocess.model.po.DataItem;
import com.rmfyzxfw.caseprocess.model.vo.DataItemDetailVO;
import com.rmfyzxfw.caseprocess.model.vo.DataItemVO;
import com.rmfyzxfw.caseprocess.service.DataItemService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;


@RestController
@RequestMapping("api/v3/dataItem")
@RequiredArgsConstructor
@Api(tags = "数据项")
public class DataItemController {
    private final DataItemService dataItemService;
    private final DataItemConverter dataItemConverter;

    @PostMapping("addDataItem")
    @ApiOperation(value = "添加数据项")
    public void addDataItem(@RequestBody @Valid DataItemCmd dataItemCmd) {
        dataItemService.addDataItem(dataItemCmd);
    }

    @PostMapping("editDataItem")
    @ApiOperation(value = "编辑数据项")
    public void editDataItem(@RequestBody @Valid DataItemEditCmd dataItemEditCmd) {
        DataItem dataItem = dataItemConverter.cmd2do(dataItemEditCmd);
        dataItemService.update(dataItem, Wrappers.<DataItem>lambdaUpdate().eq(DataItem::getDataItemId, dataItem.getDataItemId()).last("limit 1"));
    }

    @PostMapping("manageDataItem")
    @ApiOperation(value = "禁用/启用数据项")
    public void manageDataItem(@RequestBody @Valid DataItemManageCmd cmd) {
        DataItem dataItem = dataItemConverter.cmd2do(cmd);
        dataItemService.update(dataItem, Wrappers.<DataItem>lambdaUpdate().eq(DataItem::getDataItemId, dataItem.getDataItemId()).last("limit 1"));
    }

    @GetMapping("list")
    @ApiOperation(value = "数据项列表")
    public Pagination<DataItemVO> list(DataItemListParam param) {
        return dataItemService.dataItemList(param);
    }

    @GetMapping("{dataItemId}")
    @ApiOperation(value = "数据项详情")
    public DataItemDetailVO detail(@PathVariable String dataItemId) {
        DataItem dataItem = dataItemService.getOne(Wrappers.<DataItem>lambdaQuery().eq(DataItem::getDataItemId, dataItemId));
        return dataItemConverter.do2vo(dataItem);
    }
}
